Quizzes
A comprehensive system for managing quizzes, question banks, attempts, and grading workflows with modular, testable components.
ποΈ Folder Structureβ
quizzes/
βββ abilities/ # CASL policies for quiz, question, attempt, and bank permissions
β βββ attemptAbilities.ts
β βββ questionAbilities.ts
β βββ questionBankAbilities.ts
β βββ quizAbilities.ts
βββ classes/ # DTO validators and response transformers
β βββ validators/ # Input schemas: QuizValidators, QuestionValidators, AttemptValidators
β βββ transformers/ # Output schemas and mappers: QuizResponse, QuestionData, AttemptResult
βββ controllers/ # API endpoints
β βββ QuizController.ts # Create, retrieve, update, delete quizzes
β βββ QuestionBankController.ts # Manage question banks and import/export
β βββ QuestionController.ts # CRUD for individual questions
β βββ AttemptController.ts # Handle quiz attempts, submissions, and retrieval
βββ interfaces/ # TypeScript contracts
βββ question-processing/ # Pluggable question logic
β βββ QuestionProcessor.ts # Core pipeline for rendering and grading
β βββ graders/ # Individual grading strategies (multiple choice, free text)
β βββ renderers/ # Question renderers for different formats
β βββ tag-parser/ # Parses custom tags in question text
β βββ validators/ # Business-rule validators for question consistency
βββ services/ # Business logic
β βββ QuizService.ts # Orchestrates quiz creation, versioning, and deletion
β βββ QuestionBankService.ts # Bank import, export, and search
β βββ QuestionService.ts # Manages individual question lifecycle
β βββ AttemptService.ts # Evaluates submissions, calculates scores, tracks progress
βββ utils/ # Shared functions (e.g., pagination, randomization)
βββ container.ts # Binds controllers, services, repos, and abilities using InversifyJS
βββ types.ts # DI symbols for all components in module
βββ tests/ # Unit and integration tests
π― Component Responsibilitiesβ
- Controllers: Expose RESTful endpoints; validate input via DTOs; enforce CASL policies via
@Authorized
and ability decorators. - Services: Contain core business workflowsβquiz lifecycle, bank management, question operations, attempt grading and scoring.
- Repositories: Abstract MongoDB operations for quizzes, questions, banks, and attempts; support transactions and pagination.
- Abilities: Define fine-grained access rules for CRUD operations and attempt submissions.
- Question Processing: Modular pipeline to render questions, parse custom tags, validate business rules, and apply grading strategies.
- Interfaces & Types: Ensure type-safe contracts for grading algorithms, repository methods, and DTOs.
- Dependency Injection:
container.ts
binds interfaces to implementations using Inversifyβs@injectable
and@inject
, promoting loose coupling and easy testing.
π Interaction Flowβ
- Quiz Definition: Instructors create quizzes and attach question banks via
QuizController
. - Question Management: Questions authored via
QuestionController
, validated, and stored in banks. - Attempt Lifecycle: Students initiate attempts (
AttemptController
), answers processed throughAttemptService
usingQuestionProcessor
. - Scoring & Feedback: Graders compute scores; results persisted and accessible to users.
- Integration: Module interacts with Auth for user identity, Users for progress tracking.